package com.itbaizhan;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
/*Cookie对象的特点
Cookie使用字符串存储数据
Cookie使用Key与Value结构存储数据
单个Cookie存储数据大小限制在4097个字节
Cookie存储的数据中不支持中文，Servlet4.0中支持
Cookie是与域名绑定所以不支持跨一级域名访问
Cookie对象保存在客户端浏览器内存或系统磁盘中
Cookie分为持久化Cooke与状态Cookie
浏览器在保存同一域名所返回Cookie的数量是有限的。不同浏览器支持的数量不同，Chrome浏览器为50个
浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。
*/
/*
* Cookie cookie = new Cookie("key","value")
通过new关键字创建Cookie对象
response.addCookie(cookie)
通过HttpServletResponse对象将Cookie写回给客户端浏览器。*/

/*解决Cookie不支持中文
在Cookie中name的值不能使用中文，Value是可以的。
但是在Servlet4.0版本之前Cookie中的Value也是不支持中文存储的，
如果存储的数据中含有中文，代码会直接出现异常。我们可以通过对含有中文的数据
重新进行编码来解决该问题。在Servlet4.0中的Cookie的Value开始支持中文
存储。

java.lang.IllegalArgumentException: Control character in
cookie value or attribute.

URLEncoder.encode("content","code")
将内容按照指定的编码方式做URL编码处理。（创建cookie时写）

URLDecoder.decode("content","code")
将内容按照指定的编码方式做URL解码处理。(获得cookie时写)*/
public class CreateCookieServlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建cookie对象
        Cookie cookie = new Cookie("key1","learn");
        //中文
        Cookie cookie1 = new Cookie(URLEncoder.encode("海洋","utf-8"),URLEncoder.encode("鱼","utf-8"));

        //指定失效时间，单是秒
        //cookie.setMaxAge(60);
        cookie1.setMaxAge(60);

        //将cookie写回给客户
        resp.addCookie(cookie);
        resp.addCookie(cookie1);


        //客户端浏览器响应
        PrintWriter pw = resp.getWriter();
        pw.println("OK!");
        pw.flush();
        pw.close();
    }
}
